#include <iostream>
using namespace std;

/*
    1.继承语法规则
     class 子类名：public 父类      //子类公有继承父类
     class 子类名：private 父类     //子类私有继承父类
     class 子类名：protected 父类   //子类保护继承父类
    {

    };
     私有继承和保护继承用来描述has-a(包含、拥有关系)这种关系
                   比如：彭老师拥有一台法拉利
                            彭老师  class Teacher类的对象
                            法拉利  class Car类的对象
                                        teacher has a car
                                        teacher is a car
                            class Teacher:private Car
                            class Teacher:protected  Car
                            {
                                Teacher的内部才可以使用Car里面的东西

                            }
                私有继承：父类派生出子类以后，子类不能再继续私有派生孙子类
                                 彭老师拥有一台法拉利
                                 彭老师的儿子，也要使用彭老师刚才拥有的那台法拉利(用不了，私有继承只能传递一代)

                保护继承：父类派生出子类以后，子类可以继续保护派生孙子类
                                 彭老师拥有一台法拉利
                                 彭老师的儿子，也要使用彭老师刚才拥有的那台法拉利(用的了，保护继承只能传递N代)

                如果继承的时候没有写权限修饰词，默认是私有继承
                    比如：class Cat:Animal  //猫私有继承了Animal
                          {

                          };

    2.继承的好处:
     子类继承了父类，子类对象在外部可以直接使用父类的所有共有成员

    好处作用：
      提高代码的复用性(提供可重用的代码) //子类如果继承了父类，子类可以直接使用父类的公有方法
*/

class Animal
{
public:
    void eat()
    {
        cout << "animal eat" << endl;
    }
    void sleep()
    {
        cout << "animal sleep" << endl;
    }
    void run()
    {
        cout << "gogogo 出发咯~" << endl;
    }
};

class Cat : public Animal
{
public:
    void miao()
    {
        cout << "cat miao" << endl;
    }

    void eat()
    {
        cout << "cat eat" << endl;
    }

    void sleep()
    {
        cout << "cat sleep" << endl;
    }
};

class Dog : public Animal
{
public:
    void wang()
    {
        cout << "dog wang" << endl;
    }

    void eat()
    {
        cout << "dog eat" << endl;
    }

    void sleep()
    {
        cout << "dog sleep" << endl;
    }
};

int main()
{
    Animal a;
    a.eat();
    a.sleep();
    a.run();

    Cat c;
    c.eat();
    c.sleep();
    c.miao();
    c.run();

    Dog d;
    d.eat();
    d.sleep();
    d.wang();
    d.run();
}